package cn.zysheep.template;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;

/**
 * @ClassName: SmsTemplate
 * @Author: lyw
 * @Date: 2023/7/7 23:43
 */
public abstract class AbstractSmsTemplate implements SmsTemplate {

    /**
     * 1、private修饰子类无法使用redisTemplate的实例bean，子类需要重新注入
     * 2、如果子类需要使用抽象父类中的注入bean,则父类修饰符改为protected
     */
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 发送方法
     *
     * @param mobile 手机号
     */
    @Override
    public void send(String mobile) throws Exception {
        System.out.println("检查用户一分钟内是否发送过短信， mobile:" + mobile);
        if (checkUserReceiveInOneMinute(mobile)) {
            throw new Exception("请等待1分钟后重试");
        }
        String code = genCode();
        if (manufacturer(mobile, code)) {
            System.out.println("短信厂商发送短信成功， mobile:" + mobile + ",code=" + code);
            save2redis(mobile, code);
        }
    }


    /**
     * 检查1分钟内该手机号是否接收过验证码，1分钟内接收过就不能在发送验证码
     * @param mobile
     * @return
     */
    @Override
    public boolean checkUserReceiveInOneMinute(String mobile) {

        return true;
    }


    /**
     * 生成6位验证码
     * @return
     */
    @Override
    public String genCode() {
        return "123456";
    }

    /**
     * 将手机号+验证码存进redis中，给登录接口做校验用
     * @param mobile
     * @param code
     */
    @Override
    public void save2redis(String mobile, String code) {

        System.out.println(String.format("mobile: 【%s】,code: 【%s】", mobile, code));
        System.out.println("redis实例bean: "+redisTemplate);
    }
}
